package ui;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.Image;
import java.awt.Point;
import java.awt.SystemColor;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.util.Vector;

import javax.swing.DefaultComboBoxModel;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ScrollPaneConstants;
import javax.swing.SwingConstants;
import javax.swing.border.EmptyBorder;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.JTableHeader;

import control.GestionListaDePrecios;
import dominio.Articulo;
import dominio.Cotizacion;
import dominio.Marca;
import dominio.Reporte;
import dominio.ReporteCotizacion;
import dominio.ReporteManoDeObra;
import dominio.Vehiculo;

@SuppressWarnings("serial")
public class CotizacionUI extends JFrame {
	
	private GestionListaDePrecios control;
	private JTabbedPane pestanias;

	private JPanel articulosPanel;
    private Vector<Marca> marcas;
    private Vector<Vehiculo> vehiculos;
    private Vector<Articulo> articulos;
    private ArticuloModel art;
    
	private JPanel articulosPanelSuperior;
	JComboBox jComboBoxMarca;
	Marca marca;
	JComboBox jComboBoxVehiculo;
	Vehiculo vehiculo;
	
	private JTable articulosTable;
	private JTableHeader articulosTableHeader;
		
	private JPanel articulosPanelInferior;
	private Vector<Articulo> articulosFiltrados;
	private JTextField filtrar;
	JLabel lblImagen;
	JLabel lblFilas;

    private JPanel cotizacionPanel;
    private ReporteCotizacion reporte;
    private CotizacionModel cot;
    
	private JTable cotizacionTable;
	private JTableHeader cotizacionTableHeader;
	
	private JPanel cotizacionPanelInferior;
	JLabel lblCantArt;
	JTextField importeRepuestos;
	JButton reporteButton;
	
    private JPanel cilindroPanel;
    private ReporteManoDeObra reporteCilindro;
    private ObjetoModel cil;
    private JTable cilindroTable;
    JTextField importeCilindro;
    private JTableHeader cilindroTableHeader;
	private JPanel cilindroPanelInferior;
	JLabel lblCilFilas;
	JButton reporteCilindroButton;
	
    private JPanel blockPanel;
    private ReporteManoDeObra reporteBlock;
    private ObjetoModel block;
    private JTable blockTable;
    JTextField importeBlock;
    private JTableHeader blockTableHeader;
	private JPanel blockPanelInferior;
	JLabel lblBlockFilas;
	JButton reporteBlockButton;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try { 
//					UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
					CotizacionUI frame = new CotizacionUI();
					frame.setTitle("INSUR S.A. Lista de precios v2.0");
					frame.setExtendedState(6); //6 = MAXIMIZADO
					frame.setSize(new Dimension(920, 600));
					frame.setResizable(true);
					frame.setLocationRelativeTo(null);
					String urlIcon = "images/icon.png";
					frame.setIconImage(Toolkit.getDefaultToolkit().getImage(this.getClass().getClassLoader().getResource(urlIcon)));
					frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
					frame.setVisible(true);		
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public CotizacionUI() {		
		control = new GestionListaDePrecios();
		control.actualizarDatos();
		initComponents();
		
        marcas = control.inicializarMarcas();
        String m[] = new String[marcas.size()];
        for (int i = 0; i < marcas.size(); i++)
            m[i] = marcas.elementAt(i).getNombre();
        jComboBoxMarca.setModel(new DefaultComboBoxModel(m));
                      
        jComboBox1ActionPerformed(null);
	}
        
    private void jComboBox1ActionPerformed(java.awt.event.ActionEvent evt) {
        marca = marcas.elementAt(jComboBoxMarca.getSelectedIndex());
        vehiculos = control.inicializarVehiculos(marca);
        if(vehiculos.isEmpty()) { 
	        jComboBoxVehiculo.setModel(new DefaultComboBoxModel(new String[1]));
        } else {
	        String v[] = new String[vehiculos.size()];
	        for (int i = 0; i < vehiculos.size(); i++)
	            v[i] = vehiculos.elementAt(i).getNombre();
	        jComboBoxVehiculo.setModel(new DefaultComboBoxModel(v));
        }
	    jComboBox2ActionPerformed(null);
    }
    
    private void jComboBox2ActionPerformed(java.awt.event.ActionEvent evt) {
    	if(vehiculos.isEmpty()) {
    		articulos = new Vector<Articulo>();
    	} else {
	        vehiculo = vehiculos.elementAt(jComboBoxVehiculo.getSelectedIndex());
	        articulos = control.inicializarTabla(vehiculo);
    	}
		art.cambiarLista(articulos);
		articulosFiltrados = new Vector<Articulo>(articulos);
		articulosTable.updateUI();
		lblFilas.setText(String.valueOf(articulosTable.getRowCount()));
    }

    	/**
    	 * Create the frame.
    	 */
    private void initComponents() {
    	pestanias = new JTabbedPane();
    	pestaniaArticulos();
    	pestaniaCotizacion();
    	pestaniaCilindro();
    	pestaniaBlock();
		pestanias.addTab("Seleccionar Repuestos", articulosPanel);
		pestanias.addTab("Repuestos", cotizacionPanel);
		pestanias.addTab("Tapa de Cilindro", cilindroPanel);
		pestanias.addTab("Block de Motor", blockPanel);
		setContentPane(pestanias);
	}
    
    private void pestaniaArticulos() {
    	articulosPanel = new JPanel();
		articulosPanel.setBorder(new EmptyBorder(10, 10, 10, 10));
		articulosPanel.setLayout(new BorderLayout(0, 0));
		
		panelSuperiorArticulos();
		
		articulos = new Vector<Articulo>();
		articulosFiltrados = new Vector<Articulo>();
		art = new ArticuloModel(articulos);
		articulosTable = new JTable();
		articulosTable.setModel(art);
		articulosTable.setDefaultRenderer(Object.class, new ArticuloRender());
		articulosTable.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				int row = articulosTable.rowAtPoint(e.getPoint());
				int column = articulosTable.columnAtPoint(e.getPoint());
				articulosTable.changeSelection(row, column, false, false);
				
				if(column == 6) {
		    		Cotizacion cotizacion = new Cotizacion(articulosFiltrados.elementAt(row));
		    		if(!reporte.getCotizaciones().contains(cotizacion)) {
		    			reporte.getCotizaciones().add(cotizacion);
		    			lblCantArt.setText(String.valueOf(cotizacionTable.getRowCount()));
		    			importeRepuestos.setText(reporte.getImporteTotalFormateado());
		    			cotizacionTable.updateUI();		    			
		    		}
				}
			}
		});
		articulosTable.addMouseMotionListener(new MouseMotionAdapter() {
			@Override
			public void mouseMoved(MouseEvent e) {
				int column = articulosTable.columnAtPoint(e.getPoint());
				if(column == 6) {
					articulosTable.setCursor(new Cursor(Cursor.HAND_CURSOR));
				} else {
					articulosTable.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
				}
			}
        });
		
		articulosTable.setFont(new Font("Dialog", Font.PLAIN, 14));
		//articulosTable.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
		articulosTable.setShowGrid(false);
		articulosTable.setIntercellSpacing(new Dimension(0, 0));
		articulosTable.getColumnModel().getColumn(0).setPreferredWidth(80);
		articulosTable.getColumnModel().getColumn(1).setPreferredWidth(220);
		articulosTable.getColumnModel().getColumn(2).setPreferredWidth(220);
		articulosTable.getColumnModel().getColumn(3).setPreferredWidth(100);
		articulosTable.getColumnModel().getColumn(4).setPreferredWidth(50);
		articulosTable.getColumnModel().getColumn(5).setPreferredWidth(110);
		articulosTable.getColumnModel().getColumn(6).setPreferredWidth(70);
		
		articulosTable.setRowHeight(20);
        //table.setAutoCreateRowSorter(true);
        articulosTableHeader = articulosTable.getTableHeader();
        articulosTableHeader.addMouseMotionListener(new MouseMotionAdapter() {
			@Override
			public void mouseMoved(MouseEvent e) {
				articulosTableHeader.setCursor(new Cursor(Cursor.HAND_CURSOR));
				//header.setToolTipText("Ordenar");
			}
        });
        articulosTableHeader.setBackground(SystemColor.controlHighlight);
        articulosTableHeader.setFont(new Font("Dialog", Font.BOLD, 14));
		JScrollPane scrollPane = new JScrollPane(articulosTable);
		scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
		scrollPane.setBounds(22, 84, 988, 544);
		scrollPane.setViewportView(articulosTable);
		articulosPanel.add(scrollPane, BorderLayout.CENTER);
		
		panelInferiorArticulos();
    }
    
    private void panelSuperiorArticulos() {
		articulosPanelSuperior = new JPanel();
		articulosPanelSuperior.setPreferredSize(new Dimension(300, 100));
		articulosPanelSuperior.setLayout(null);
		
		JLabel lblMarca = new JLabel("Marca:");
		lblMarca.setFont(new Font("Dialog", Font.BOLD, 16));
		lblMarca.setBounds(10, 10, 80, 25);
		articulosPanelSuperior.add(lblMarca);
		
		jComboBoxMarca = new JComboBox();
		jComboBoxMarca.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				jComboBox1ActionPerformed(e);
			}
		});		
		jComboBoxMarca.setFont(new Font("Dialog", Font.PLAIN, 16));
		jComboBoxMarca.setBounds(100, 10, 380, 25);
		articulosPanelSuperior.add(jComboBoxMarca);
		
		JLabel lblVehculo = new JLabel("Veh\u00edculo:");
		lblVehculo.setFont(new Font("Dialog", Font.BOLD, 16));
		lblVehculo.setBounds(10, 50, 80, 25);
		articulosPanelSuperior.add(lblVehculo);
		
        jComboBoxVehiculo = new JComboBox();
        jComboBoxVehiculo.addActionListener(new ActionListener() {
        	public void actionPerformed(ActionEvent e) {
        		jComboBox2ActionPerformed(e);
        	}
        });
        jComboBoxVehiculo.setFont(new Font("Dialog", Font.PLAIN, 16));
        jComboBoxVehiculo.setBounds(100, 50, 380, 25);
        articulosPanelSuperior.add(jComboBoxVehiculo);
        
        try {
			String url = "images/contacto.jpg";
			ImageIcon imagen = new ImageIcon(this.getClass().getClassLoader().getResource(url));		
			JLabel lblImage = new JLabel(imagen);
			lblImage.setBounds(500, 0, 386, 85);
			articulosPanelSuperior.add(lblImage);
        } catch (Exception e) {
        	e.printStackTrace();
        }
		
		articulosPanel.add(articulosPanelSuperior, BorderLayout.NORTH);
    }    
    
    private void panelInferiorArticulos() {
		articulosPanelInferior = new JPanel();
		articulosPanelInferior.setLayout(new BorderLayout());
		
        JPanel izquierda  = new JPanel();
        izquierda.setPreferredSize(new Dimension(450, 40));
        izquierda.setLayout(null);
        
		JLabel lblFiltrar = new JLabel("Filtrar:");
		lblFiltrar.setFont(new Font("Dialog", Font.BOLD, 16));
		lblFiltrar.setBounds(10, 10, 60, 25);
		izquierda.add(lblFiltrar);
		
		filtrar = new JTextField();
		filtrar.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				filtrar.selectAll();
			}
		});
		filtrar.addKeyListener(new KeyAdapter() {
			
			@Override
			public void keyReleased(KeyEvent e) {
				String filtro = filtrar.getText().trim().toLowerCase();
				filtrarRepuestos(filtro);
			}
			@Override
			public void keyTyped(KeyEvent e) {
				int limite_filtro  = 10;
				if (filtrar.getText().length() == limite_filtro) {
				     e.consume();
				     Toolkit.getDefaultToolkit().beep();
				}
			}
			@Override
			public void keyPressed(KeyEvent e) {
				// TODO Auto-generated method stub				
			}
			
		});
		filtrar.setForeground(Color.DARK_GRAY);
		filtrar.setFont(new Font("Dialog", Font.PLAIN, 18));
		filtrar.setBounds(80, 10, 200, 25);
		filtrar.setColumns(10);
		izquierda.add(filtrar);		
		
		try {
			String url = "images/actualizar.png";
			ImageIcon imagen = new ImageIcon(this.getClass().getClassLoader().getResource(url));
			lblImagen = new JLabel();
			lblImagen.addMouseMotionListener(new MouseMotionAdapter() {
				@Override
				public void mouseMoved(MouseEvent e) {
					lblImagen.setCursor(new Cursor(Cursor.HAND_CURSOR));
					lblImagen.setToolTipText("Limpiar filtro");
				}
			});
			lblImagen.setBounds(290, 10, 25, 25);
		    Icon icono = new ImageIcon(imagen.getImage().getScaledInstance(lblImagen.getWidth(), lblImagen.getHeight(), Image.SCALE_DEFAULT));
		    lblImagen.setIcon(icono);
			lblImagen.addMouseListener(new MouseAdapter() {
				@Override
				public void mouseClicked(MouseEvent e) {
					filtrar.setText("");
					art.cambiarLista(articulos);
					articulosTable.updateUI();
					lblFilas.setText(String.valueOf(articulosTable.getRowCount()));
				}
			});
			izquierda.add(lblImagen);
	    } catch (Exception e) {
	    	e.printStackTrace();
	    }
				
        JLabel label = new JLabel("Filas:");
        label.setFont(new Font("Dialog", Font.BOLD, 16));
        label.setBounds(350, 10, 50, 25);
        izquierda.add(label);
        
        lblFilas = new JLabel();
        lblFilas.setForeground(Color.DARK_GRAY);
        lblFilas.setFont(new Font("Dialog", Font.BOLD, 16));
        lblFilas.setBounds(400, 10, 35, 25);
        izquierda.add(lblFilas);
        
        articulosPanelInferior.add(izquierda, BorderLayout.WEST);        
        JPanel derecha = new JPanel();
        derecha.setPreferredSize(new Dimension(250, 40));
		derecha.setLayout(null);
        
        JLabel label1 = new JLabel("\u00daltima actualizaci\u00f3n:");
        label1.setFont(new Font("Dialog", Font.PLAIN, 12));
        label1.setBounds(0, 25, 130, 20);
        derecha.add(label1);
        
        JLabel lblVersion = new JLabel();
        lblVersion.setFont(new Font("Dialog", Font.PLAIN, 12));
        lblVersion.setBounds(130, 25, 120, 20);
        lblVersion.setText(control.ultimaActualizacion());
        derecha.add(lblVersion);
        
        articulosPanelInferior.add(derecha, BorderLayout.EAST);        
    	articulosPanel.add(articulosPanelInferior, BorderLayout.SOUTH);
    }
    
	private void filtrarRepuestos(String filtro) {
		articulosFiltrados = new Vector<Articulo>();
		for(int i=0; i < articulos.size(); i++) {
			Articulo r = articulos.elementAt(i);
			String rubro_marca = r.getRubro_marca().toLowerCase();
			if(rubro_marca.contains(filtro)) 
				articulosFiltrados.add(r);
		}
		art.cambiarLista(articulosFiltrados);
		articulosTable.updateUI();
		lblFilas.setText(String.valueOf(articulosTable.getRowCount()));
	}
	
    private void pestaniaCotizacion() {
    	cotizacionPanel = new JPanel();
    	cotizacionPanel.setBorder(new EmptyBorder(10, 10, 10, 10));
    	cotizacionPanel.setLayout(new BorderLayout(0, 0));
    	
    	reporte = new ReporteCotizacion();
		cot = new CotizacionModel(reporte.getCotizaciones());
		cotizacionTable = new JTable();
		cotizacionTable.setModel(cot);
		cotizacionTable.setDefaultRenderer(Object.class, new CotizacionRender());
		
		//La columna de Cantidad se edita con un solo click y devuelve todo el contenido de la celda seleccionado
		ObjetoCellEditor singleclick = new ObjetoCellEditor();
		cotizacionTable.setDefaultEditor(cotizacionTable.getColumnClass(6), singleclick);
		
		cotizacionTable.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				int row = cotizacionTable.rowAtPoint(e.getPoint());
				int column = cotizacionTable.columnAtPoint(e.getPoint());
				if(column == 8) {
		    		reporte.getCotizaciones().remove(row);
		    		lblCantArt.setText(String.valueOf(cotizacionTable.getRowCount()));
		    		importeRepuestos.setText(reporte.getImporteTotalFormateado());
		    		cotizacionTable.updateUI();
				}
			}
		});
		cotizacionTable.addMouseMotionListener(new MouseMotionAdapter() {
			@Override
			public void mouseMoved(MouseEvent e) {
				int column = cotizacionTable.columnAtPoint(e.getPoint());
				
				//Nuevo cursor para alertar al usuario que se puede editar columna
				String url = "images/pencil.png";
				Toolkit toolkit = Toolkit.getDefaultToolkit();
				Image imagen = toolkit.getImage(this.getClass().getClassLoader().getResource(url));
		        Point hotspot = new Point(0, 0);
		    	Cursor cursor = toolkit.createCustomCursor(imagen, hotspot, "Editar");
				
				if(column == 6) {
					cotizacionTable.setToolTipText("Modificar cantidad");
					cotizacionTable.setCursor(cursor);
				} else if(column == 8) {
					cotizacionTable.setCursor(new Cursor(Cursor.HAND_CURSOR));
				} else {
					cotizacionTable.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
				}
			}
        });
		
		cotizacionTable.getModel().addTableModelListener(new TableModelListener() {
			@Override
			public void tableChanged(TableModelEvent e) {
				importeRepuestos.setText(reporte.getImporteTotalFormateado());
				cotizacionTable.updateUI();
		    }		
		});
		
		cotizacionTable.setFont(new Font("Dialog", Font.PLAIN, 14));
		//table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
		cotizacionTable.setShowGrid(false);
		cotizacionTable.setIntercellSpacing(new Dimension(0, 0));
		cotizacionTable.getColumnModel().getColumn(0).setPreferredWidth(70);
		cotizacionTable.getColumnModel().getColumn(1).setPreferredWidth(220);
		cotizacionTable.getColumnModel().getColumn(2).setPreferredWidth(200);
		cotizacionTable.getColumnModel().getColumn(3).setPreferredWidth(100);
		cotizacionTable.getColumnModel().getColumn(4).setPreferredWidth(50);
		cotizacionTable.getColumnModel().getColumn(5).setPreferredWidth(60);
		cotizacionTable.getColumnModel().getColumn(6).setPreferredWidth(70);
		cotizacionTable.getColumnModel().getColumn(7).setPreferredWidth(70);
		cotizacionTable.getColumnModel().getColumn(8).setPreferredWidth(60);
		cotizacionTable.setRowHeight(20);
		//cotizacionTable.setAutoCreateRowSorter(true);
        cotizacionTableHeader = cotizacionTable.getTableHeader();
        cotizacionTableHeader.addMouseMotionListener(new MouseMotionAdapter() {
			@Override
			public void mouseMoved(MouseEvent e) {
				cotizacionTableHeader.setCursor(new Cursor(Cursor.HAND_CURSOR));
			}
        });
        cotizacionTableHeader.setBackground(SystemColor.controlHighlight);
        cotizacionTableHeader.setFont(new Font("Dialog", Font.BOLD, 14));
		JScrollPane scrollPane = new JScrollPane(cotizacionTable);
		scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
		scrollPane.setBounds(22, 84, 988, 544);
		scrollPane.setViewportView(cotizacionTable);
		cotizacionPanel.add(scrollPane, BorderLayout.CENTER);
		
		panelInferiorCotizacion();
    }
    
    private void panelInferiorCotizacion() {
    	cotizacionPanelInferior = new JPanel();
    	cotizacionPanelInferior.setLayout(new BorderLayout());
		
        JPanel izquierda  = new JPanel();
        izquierda.setPreferredSize(new Dimension(300, 45));
        izquierda.setLayout(null);
    	
		JLabel lblCantidad = new JLabel("Art\u00edculos seleccionados:");
		lblCantidad.setFont(new Font("Dialog", Font.BOLD, 16));
		lblCantidad.setBounds(10, 12, 220, 25);
		izquierda.add(lblCantidad);
        
        lblCantArt = new JLabel();
        lblCantArt.setForeground(Color.DARK_GRAY);
        lblCantArt.setFont(new Font("Dialog", Font.BOLD, 16));
        lblCantArt.setBounds(230, 12, 35, 25);
        lblCantArt.setText(String.valueOf(cotizacionTable.getRowCount()));
        izquierda.add(lblCantArt);
        
        cotizacionPanelInferior.add(izquierda, BorderLayout.WEST);
        JPanel derecha  = new JPanel();
        derecha.setPreferredSize(new Dimension(300, 45));
        derecha.setLayout(null);
        
		JLabel lblImporte = new JLabel("Importe:");
		lblImporte.setFont(new Font("Dialog", Font.BOLD, 16));
		lblImporte.setBounds(10, 12, 80, 25);
		derecha.add(lblImporte);
        
		importeRepuestos = new JTextField();
		importeRepuestos.setForeground(Color.DARK_GRAY);
		importeRepuestos.setFont(new Font("Dialog", Font.PLAIN, 18));
		importeRepuestos.setBounds(90, 12, 100, 25);
		importeRepuestos.setColumns(10);
		importeRepuestos.setText(reporte.getImporteTotalFormateado());
		importeRepuestos.setHorizontalAlignment(JTextField.RIGHT);
		derecha.add(importeRepuestos);
		
        reporteButton = new JButton();
        reporteButton.setHorizontalTextPosition(SwingConstants.CENTER);
        reporteButton.addActionListener(new ActionListener() {
        	public void actionPerformed(ActionEvent e) {
        		reporte.setMarca(marca.getNombre());
        		reporte.setVehiculo(vehiculo.getNombre());
        		if(reporte.getCotizaciones().size() > 0 )
        			ingresarCliente(reporte, 1);
        	}
        });
        reporteButton.setLayout(new BorderLayout());
        JLabel label1 = new JLabel("Generar");
        JLabel label2 = new JLabel("Reporte");
        reporteButton.add(BorderLayout.NORTH,label1);
        reporteButton.add(BorderLayout.SOUTH,label2);
		reporteButton.setBounds(205, 5, 95, 40);
		derecha.add(reporteButton);
        
		cotizacionPanelInferior.add(derecha, BorderLayout.EAST);
    	cotizacionPanel.add(cotizacionPanelInferior, BorderLayout.SOUTH);
    }
    
    private void ingresarCliente(Reporte reporte, int bandera) {
		try {
//			UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
			IngresarClienteUI frame = new IngresarClienteUI(control, reporte, bandera);
			frame.setTitle("Ingresar Cliente");
			frame.setSize(new Dimension(360, 190));
			frame.setResizable(false);
			frame.setLocationRelativeTo(null);
			String urlIcon = "images/icon.png";
			frame.setIconImage(Toolkit.getDefaultToolkit().getImage(this.getClass().getClassLoader().getResource(urlIcon)));
			frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
			frame.setModal(true);
			frame.setVisible(true);
			
		} catch (Exception e) {
			e.printStackTrace();
		}
    	
    }
    
    //Pestaña Cilindro
    
    private void pestaniaCilindro() {
    	cilindroPanel = new JPanel();
    	cilindroPanel.setBorder(new EmptyBorder(10, 10, 10, 10));
    	cilindroPanel.setLayout(new BorderLayout(0, 0));
    	
    	reporteCilindro = new ReporteManoDeObra();
    	reporteCilindro.setFilas(control.inicializarTapaCilindro());
    	cil = new ObjetoModel(reporteCilindro.getFilas());
		cilindroTable = new JTable();
		cilindroTable.setModel(cil);
		cilindroTable.setDefaultRenderer(Object.class, new ObjetoRender());
		
		//La columna de Precio se edita con un solo click y devuelve todo el contenido de la celda
		ObjetoCellEditor singleclick = new ObjetoCellEditor();
		cilindroTable.setDefaultEditor(cilindroTable.getColumnClass(2), singleclick);
		
		cilindroTable.addMouseMotionListener(new MouseMotionAdapter() {
			@Override
			public void mouseMoved(MouseEvent e) {
				int column = cilindroTable.columnAtPoint(e.getPoint());
				
				//Nuevo cursor para alertar al usuario que se puede editar columna
				String url = "images/pencil.png";
				Toolkit toolkit = Toolkit.getDefaultToolkit();
				Image imagen = toolkit.getImage(this.getClass().getClassLoader().getResource(url));
		        Point hotspot = new Point(0, 0);
		    	Cursor cursor = toolkit.createCustomCursor(imagen, hotspot, "Editar");
				
				if(column == 2) {
					cilindroTable.setToolTipText("Modificar precio");
					cilindroTable.setCursor(cursor);
				}  else {
					cilindroTable.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
				}
			}
        });
		
		cilindroTable.getModel().addTableModelListener(new TableModelListener() {
			@Override
			public void tableChanged(TableModelEvent e) {
				importeCilindro.setText(reporteCilindro.getImporteTotalFormateado());
				lblCilFilas.setText(String.valueOf(reporteCilindro.getFilasConValor().size()));
				cilindroTable.updateUI();
		    }		
		});
		
		cilindroTable.setFont(new Font("Dialog", Font.PLAIN, 14));
//		cilindroTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
		cilindroTable.setShowGrid(false);
		cilindroTable.setIntercellSpacing(new Dimension(0, 0));
		cilindroTable.getColumnModel().getColumn(0).setPreferredWidth(80);
		cilindroTable.getColumnModel().getColumn(0).setResizable(false);
		cilindroTable.getColumnModel().getColumn(1).setPreferredWidth(800);
		cilindroTable.getColumnModel().getColumn(2).setPreferredWidth(80);
		cilindroTable.getColumnModel().getColumn(2).setResizable(false);
		cilindroTable.setRowHeight(20);
		//cotizacionTable.setAutoCreateRowSorter(true);
        cilindroTableHeader = cilindroTable.getTableHeader();
        cilindroTableHeader.addMouseMotionListener(new MouseMotionAdapter() {
			@Override
			public void mouseMoved(MouseEvent e) {
				cilindroTableHeader.setCursor(new Cursor(Cursor.HAND_CURSOR));
			}
        });
        cilindroTableHeader.setBackground(SystemColor.controlHighlight);
        cilindroTableHeader.setFont(new Font("Dialog", Font.BOLD, 14));

		JScrollPane scrollPane = new JScrollPane(cilindroTable);
		scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
		scrollPane.setBounds(22, 84, 988, 544);
		scrollPane.setViewportView(cilindroTable);
		cilindroPanel.add(scrollPane, BorderLayout.CENTER);
		
		panelInferiorCilindro();
    }
    
    private void panelInferiorCilindro() {
    	cilindroPanelInferior = new JPanel();
    	cilindroPanelInferior.setLayout(new BorderLayout());
		
    	JPanel izquierda  = new JPanel();
        izquierda.setPreferredSize(new Dimension(300, 45));
        izquierda.setLayout(null);
    	
		JLabel lblCantidad = new JLabel("Filas modificadas:");
		lblCantidad.setFont(new Font("Dialog", Font.BOLD, 16));
		lblCantidad.setBounds(10, 12, 170, 25);
		izquierda.add(lblCantidad);
        
		lblCilFilas = new JLabel();
		lblCilFilas.setForeground(Color.DARK_GRAY);
		lblCilFilas.setFont(new Font("Dialog", Font.BOLD, 16));
		lblCilFilas.setBounds(180, 12, 35, 25);
		lblCilFilas.setText(String.valueOf(reporteCilindro.getFilasConValor().size()));
        izquierda.add(lblCilFilas);
        
        cilindroPanelInferior.add(izquierda, BorderLayout.WEST);
    	JPanel derecha  = new JPanel();
        derecha.setPreferredSize(new Dimension(300, 45));
        derecha.setLayout(null);
        
		JLabel lblImporte = new JLabel("Importe:");
		lblImporte.setFont(new Font("Dialog", Font.BOLD, 16));
		lblImporte.setBounds(10, 12, 80, 25);
		derecha.add(lblImporte);
        
		importeCilindro = new JTextField();
		importeCilindro.setForeground(Color.DARK_GRAY);
		importeCilindro.setFont(new Font("Dialog", Font.PLAIN, 18));
		importeCilindro.setBounds(90, 12, 100, 25);
		importeCilindro.setColumns(10);
		importeCilindro.setText(reporteCilindro.getImporteTotalFormateado());
		importeCilindro.setHorizontalAlignment(JTextField.RIGHT);
		derecha.add(importeCilindro);
		
        reporteCilindroButton = new JButton();
        reporteCilindroButton.setHorizontalTextPosition(SwingConstants.CENTER);
        reporteCilindroButton.addActionListener(new ActionListener() {
        	public void actionPerformed(ActionEvent e) {
        		reporteCilindro.setMarca(marca.getNombre());
        		reporteCilindro.setVehiculo(vehiculo.getNombre());
        		if(reporteCilindro.getFilasConValor().size() > 0)
        			ingresarCliente(reporteCilindro, 2);
        	}
        });
        reporteCilindroButton.setLayout(new BorderLayout());
        JLabel label1 = new JLabel("Generar");
        JLabel label2 = new JLabel("Reporte");
        reporteCilindroButton.add(BorderLayout.NORTH,label1);
        reporteCilindroButton.add(BorderLayout.SOUTH,label2);
        reporteCilindroButton.setBounds(205, 5, 95, 40);
		derecha.add(reporteCilindroButton);
        
		cilindroPanelInferior.add(derecha, BorderLayout.EAST);
    	cilindroPanel.add(cilindroPanelInferior, BorderLayout.SOUTH);
    }
    
    //Pestaña Block
    
    private void pestaniaBlock() {
    	blockPanel = new JPanel();
    	blockPanel.setBorder(new EmptyBorder(10, 10, 10, 10));
    	blockPanel.setLayout(new BorderLayout(0, 0));
    	
    	reporteBlock = new ReporteManoDeObra();
    	reporteBlock.setFilas(control.inicializarBlockMotor());
    	block = new ObjetoModel(reporteBlock.getFilas());
		blockTable = new JTable();
		blockTable.setModel(block);
		blockTable.setDefaultRenderer(Object.class, new ObjetoRender());
		
		//La columna de Precio se edita con un solo click y devuelve todo el contenido de la celda
		ObjetoCellEditor singleclick = new ObjetoCellEditor();
		blockTable.setDefaultEditor(blockTable.getColumnClass(2), singleclick);
		
		blockTable.addMouseMotionListener(new MouseMotionAdapter() {
			@Override
			public void mouseMoved(MouseEvent e) {
				int column = blockTable.columnAtPoint(e.getPoint());
				
				//Nuevo cursor para alertar al usuario que se puede editar columna
				String url = "images/pencil.png";
				Toolkit toolkit = Toolkit.getDefaultToolkit();
				Image imagen = toolkit.getImage(this.getClass().getClassLoader().getResource(url));
		        Point hotspot = new Point(0, 0);
		    	Cursor cursor = toolkit.createCustomCursor(imagen, hotspot, "Editar");
				
				if(column == 2) {
					blockTable.setToolTipText("Modificar precio");
					blockTable.setCursor(cursor);
				}  else {
					blockTable.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
				}
			}
        });
		
		block.addTableModelListener(new TableModelListener() {
			@Override
			public void tableChanged(TableModelEvent e) {
				importeBlock.setText(reporteBlock.getImporteTotalFormateado());
				lblBlockFilas.setText(String.valueOf(reporteBlock.getFilasConValor().size()));
				blockTable.updateUI();
		    }		
		});
		
		blockTable.setFont(new Font("Dialog", Font.PLAIN, 14));
//		blockTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
		blockTable.setShowGrid(false);
		blockTable.setIntercellSpacing(new Dimension(0, 0));
		blockTable.getColumnModel().getColumn(0).setPreferredWidth(80);
		blockTable.getColumnModel().getColumn(0).setResizable(false);
		blockTable.getColumnModel().getColumn(1).setPreferredWidth(800);
		blockTable.getColumnModel().getColumn(2).setPreferredWidth(80);
		blockTable.getColumnModel().getColumn(2).setResizable(false);
		blockTable.setRowHeight(20);
		//cotizacionTable.setAutoCreateRowSorter(true);
        blockTableHeader = blockTable.getTableHeader();
        blockTableHeader.addMouseMotionListener(new MouseMotionAdapter() {
			@Override
			public void mouseMoved(MouseEvent e) {
				blockTableHeader.setCursor(new Cursor(Cursor.HAND_CURSOR));
			}
        });
        blockTableHeader.setBackground(SystemColor.controlHighlight);
        blockTableHeader.setFont(new Font("Dialog", Font.BOLD, 14));

		JScrollPane scrollPane = new JScrollPane(blockTable);
		scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
		scrollPane.setBounds(22, 84, 988, 544);
		scrollPane.setViewportView(blockTable);
		blockPanel.add(scrollPane, BorderLayout.CENTER);
		
		panelInferiorBlock();
    }
    
    private void panelInferiorBlock() {
    	blockPanelInferior = new JPanel();
    	blockPanelInferior.setLayout(new BorderLayout());
		
    	JPanel izquierda  = new JPanel();
        izquierda.setPreferredSize(new Dimension(300, 45));
        izquierda.setLayout(null);
    	
		JLabel lblCantidad = new JLabel("Filas modificadas:");
		lblCantidad.setFont(new Font("Dialog", Font.BOLD, 16));
		lblCantidad.setBounds(10, 12, 170, 25);
		izquierda.add(lblCantidad);
        
		lblBlockFilas = new JLabel();
		lblBlockFilas.setForeground(Color.DARK_GRAY);
		lblBlockFilas.setFont(new Font("Dialog", Font.BOLD, 16));
		lblBlockFilas.setBounds(180, 12, 35, 25);
		lblBlockFilas.setText(String.valueOf(reporteBlock.getFilasConValor().size()));
        izquierda.add(lblBlockFilas);
        
        blockPanelInferior.add(izquierda, BorderLayout.WEST);    	
        JPanel derecha  = new JPanel();
        derecha.setPreferredSize(new Dimension(300, 45));
        derecha.setLayout(null);
        
		JLabel lblImporte = new JLabel("Importe:");
		lblImporte.setFont(new Font("Dialog", Font.BOLD, 16));
		lblImporte.setBounds(10, 12, 80, 25);
		derecha.add(lblImporte);
        
		importeBlock = new JTextField();
		importeBlock.setForeground(Color.DARK_GRAY);
		importeBlock.setFont(new Font("Dialog", Font.PLAIN, 18));
		importeBlock.setBounds(90, 12, 100, 25);
		importeBlock.setColumns(10);
		importeBlock.setText(reporteBlock.getImporteTotalFormateado());
		importeBlock.setHorizontalAlignment(JTextField.RIGHT);
		derecha.add(importeBlock);
		
        reporteBlockButton = new JButton();
        reporteBlockButton.setHorizontalTextPosition(SwingConstants.CENTER);
        reporteBlockButton.addActionListener(new ActionListener() {
        	public void actionPerformed(ActionEvent e) {
        		reporteBlock.setMarca(marca.getNombre());
        		reporteBlock.setVehiculo(vehiculo.getNombre());
        		if(reporteBlock.getFilasConValor().size() > 0)
        			ingresarCliente(reporteBlock, 3);;
        	}
        });
        reporteBlockButton.setLayout(new BorderLayout());
        JLabel label1 = new JLabel("Generar");
        JLabel label2 = new JLabel("Reporte");
        reporteBlockButton.add(BorderLayout.NORTH,label1);
        reporteBlockButton.add(BorderLayout.SOUTH,label2);
        reporteBlockButton.setBounds(205, 5, 95, 40);
		derecha.add(reporteBlockButton);
        
		blockPanelInferior.add(derecha, BorderLayout.EAST);
    	blockPanel.add(blockPanelInferior, BorderLayout.SOUTH);
    }
}